#include <allegro.h>

#define ECRAN_X	600
#define ECRAN_Y	800

int main() {

		typedef struct 
		{
		int x1;
		int y1;
		int direction;
		}personnage ;

//initialisation du personnage principale
personnage rec[2];
rec[1].x1=0;
rec[1].y1=680;
rec[1].direction=1;

//initialisation du pirate
rec[2].x1=400;
rec[2].y1=80;
rec[2].direction=1;
int px,py;		// pas d'avancement en x et y
int xmin,xmax,ymin,ymax;

int coll=0;

//creation des bitmaps
BITMAP *Buffer;
BITMAP *Image_i;
BITMAP *Background;


// function d'initialisation d'allegro
allegro_init();

//chargement du clavier
if (install_keyboard() == -1) {
allegro_message("Error! %s", allegro_error);
return -1;
}

srand(time(NULL));

	//mattre les color en mode 16bits
	set_color_depth(16);
	
	//chargement du mode frafique
	if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, ECRAN_X, ECRAN_Y, 0, 0) != 0) {
	set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); //chargement for text mode 
	allegro_message("Unable to initialize video mode!\n%s\n", allegro_error);
	return 1;
	}

	// controle sur la fin de programme
	int done=0;

	//pour contrôler la vitesse du déplacement
	int vmax=1;

  	// initialisation des variables d'avencement px,py et de zone
   	px=(rand()%vmax)+1;
  	py=(rand()%vmax)+1;
	xmax=ECRAN_X;
	xmin=250;
	ymin=0;
	ymax=300;
	
	//creation Buffer
	Buffer = create_bitmap(ECRAN_X, ECRAN_Y);

	//test sur la creation du buffer
	if (!Buffer)
		{set_gfx_mode(GFX_TEXT,0,0,0,0);
	   	allegro_message("erreur");
	   	allegro_exit();
	   	exit(EXIT_FAILURE);}
	
	//chargement du background
	Background = load_bitmap("./grotte.bmp", NULL);

if (Image_i == NULL && Background == NULL) 
{
allegro_message("could not load images");
allegro_exit();
}

	while (!done)
	{
		while(!keypressed())
		{
		//test sur la collusion
	if (!( rec[2].x1 < rec[1].x1+80 &&  rec[2].y1 < rec[1].y1+120 && rec[1].x1 <  rec[2].x1+80 && rec[1].y1 <  rec[2].y1+120))
	{ 
    	// move
	  	 (rec[2].x1)+=px;
	  	 (rec[2].y1)+=py;  

	// contrôle de la zone du movement
	  	if ( rec[2].x1<xmin) {
		  	px=ABS(px);
			rec[2].direction=1;
		}
	  	if (rec[2].x1+80>xmax) {
		  	px=-ABS(px);
			rec[2].direction=0; 
		}
	  	if ( rec[2].y1<ymin)
		  	py=ABS(py);
	  	if ( (rec[2].y1+120)>ymax)
		  	py=-ABS(py);
   	}
	else{coll=1;}


    	//  affichage
	  	clear_bitmap(Buffer);
		blit(Background, Buffer, 0, 0, 0, 0, Background->w, Background->h);
		rectfill(Buffer,rec[1].x1, rec[1].y1-10, rec[1].x1+53 ,rec[1].y1-5 ,makecol(0,255,0));
		if(rec[1].direction==1)
		{Image_i = load_bitmap("./mario1.bmp", NULL);}
		else{Image_i = load_bitmap("./mario0.bmp", NULL);}
		draw_sprite(Buffer, Image_i,rec[1].x1,rec[1].y1 );
		if(rec[2].direction==1)
		{Image_i = load_bitmap("./pirate1.bmp", NULL);}
		else{Image_i = load_bitmap("./pirate0.bmp", NULL);}
		draw_sprite(Buffer, Image_i,rec[2].x1,rec[2].y1 );
	  	blit(Buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
		}
	
		if (key[KEY_A]&& rec[1].x1!=0)
		{
			if(!(coll && rec[1].x1-53-rec[2].x1==0)){
		rec[1].x1--;
		rec[1].direction=0;
			}
		}

		if (key [KEY_D] && rec[1].x1!=SCREEN_W-80)
		{
			if(!(coll && rec[1].x1+53-rec[2].x1==0)){
		rec[1].x1++;
		rec[1].direction=1;
			}
		}

		if (key [KEY_W] && rec[1].y1!=12 )
		{
			if(!(coll && rec[1].y1-84-rec[2].y1==0)){
		rec[1].y1--;
			}
		}
		if (key [KEY_S] && rec[1].y1!=SCREEN_H-120)
		{
			if(!(coll && rec[1].y1+84-rec[2].y1==0)){
		rec[1].y1++;
			}
		}
		
		//condition de sortie
		if(key[KEY_ESC]) done=1;
readkey();

}

destroy_bitmap(Image_i);
destroy_bitmap(Buffer);
return 0;
}
END_OF_MAIN();
